﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace OFDParserLibrary
{
    internal class Invoice
    {
        #region//origin_invoice.xml对应字段
        /// <summary>
        /// 文档ID
        /// </summary>
        public string DocID { get; set; }
        /// <summary>
        /// 发票代码 10位或12位
        /// </summary>
        public string InvoiceCode { get; set; }
        /// <summary>
        /// 发票号码 8位
        /// </summary>
        public string InvoiceNo { get; set; }
        /// <summary>
        /// 发票类型  0 代表 电子普通发票
        /// </summary>
        public string TypeCode { get; set; }
        /// <summary>
        /// 开票时间 格式 yyyy年MM月dd日
        /// </summary>
        public string IssueDate { get; set; }
        /// <summary>
        /// 发票检验码（电子票有内容）
        /// </summary>
        public string InvoiceCheckCode { get; set; }
        /// <summary>
        /// 机器编码 如单机开票，此值就是单机盘号
        /// </summary>
        public string MachineNo { get; set; }
        /// <summary>
        /// 密码（电子票有密码区内容） 注意 获取到的字符串中有&gt; &lt;（分别代表符号>,<）
        /// </summary>
        public string TaxControlCode { get; set; }
        /// <summary>
        /// 购买方名称
        /// </summary>
        public string BuyerName { get; set; }
        /// <summary>
        /// 购买方税号
        /// </summary>
        public string BuyerTaxID { get; set; }
        /// <summary>
        /// 购买方地址、电话
        /// </summary>
        public string BuyerAddrTel { get; set; }
        /// <summary>
        /// 购买方开户行、账号
        /// </summary>
        public string BuyerFinancialAccount { get; set; }
        /// <summary>
        /// 未知 ？？？
        /// </summary>
        public string Tpvn { get; set; }
        /// <summary>
        /// 销售方名称
        /// </summary>
        public string SellerName { get; set; }
        /// <summary>
        /// 销售方税号
        /// </summary>
        public string SellerTaxID { get; set; }
        /// <summary>
        /// 销售方地址、电话
        /// </summary>
        public string SellerAddrTel { get; set; }
        /// <summary>
        /// 销售方开户行、账号
        /// </summary>
        public string SellerFinancialAccount { get; set; }
        /// <summary>
        /// 未知 ？？？
        /// </summary>
        public string Issuea1 { get; set; }
        /// <summary>
        /// 未知 ？？？
        /// </summary>
        public string Issuea2 { get; set; }
        /// <summary>
        /// 价税合计 （不含税总额+税额总额）
        /// </summary>
        public string TaxInclusiveTotalAmount { get; set; }
        /// <summary>
        /// 备注
        /// </summary>
        public string Note { get; set; }
        /// <summary>
        /// 开票人 20字符 10个汉字或20个字符
        /// </summary>
        public string InvoiceClerk { get; set; }
        /// <summary>
        /// 收款人 20字符 10个汉字或20个字符
        /// </summary>
        public string Payee { get; set; }
        /// <summary>
        /// 复核人 20字符 10个汉字或20个字符
        /// </summary>
        public string Checker { get; set; }
        /// <summary>
        /// 税额总计
        /// </summary>
        public string TaxTotalAmount { get; set; }
        /// <summary>
        /// 不含税总计
        /// </summary>
        public string TaxExclusiveTotalAmount { get; set; }
        /// <summary>
        /// 电子票生成的二维码所包含的内容，可以根据包含内容调用QRCode重新生成二维码保存成图片在网络上传递
        /// 参考博文 https://blog.csdn.net/zyzBulus/article/details/87724157 
        /// 以及 https://blog.csdn.net/miao_x_m/article/details/101027666?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase
        ///string code = "1,050001700111,35436358,300.00,20200609,14627915136010359375";
        ///string strCode = "01,10,011001900211,03108411,4,20200423,11762493383204597018,51B9,";
        ///string strCode = "01,10,050001700111,35436358,300.00,20200609,14627915136010359375";
        /// 该字符串以逗号分隔每一个属性值，从左到右依次是：
        ///01：第一个属性值，尚未搞清楚含义；
        ///10：第二个属性值，代表发票种类代码，10-增值税电子普通发票，04-增值税普通发票，01-增值税专用发票；
        ///011001605111：第三个属性值，代表发票代码；
        ///80100798：第四个属性值，代表发票号码；
        ///64.9：第五个属性值，代表开票金额；
        ///20161018：第六个属性值，代表开票日期，该值为2016年10月18日；
        ///85342965681116380258：第七个属性值，代码发票校验码，我们都知道增值税专用发票是没有发票校验码的，没有则为空字符串；
        ///第八项：随机产生的机密信息
        /// </summary>
        public string GraphCode { get; set; }
        /// <summary>
        /// 如果发票是负数发票，此字段有值，且固定值为“销项负数”；否则此字段没有值
        /// </summary>
        public string InvoiceSIA1 { get; set; }
        /// <summary>
        /// 未知 ？？？
        /// </summary>
        public string InvoiceSIA2 { get; set; }
        /// <summary>
        /// 全票面签名 （电子票有内容）
        /// </summary>
        public string Signature { get; set; }
        /// <summary>
        /// 商品信息列表
        /// </summary>
        public List<GoodsInfo> GoodsInfos { get; set; }
        #endregion
    }
    /// <summary>
    /// 商品行信息
    /// </summary>
    internal class GoodsInfo
    {
        /// <summary>
        /// 商品名称 *淀粉制品*制作费
        /// </summary>
        public string Item { get; set; }
        /// <summary>
        /// 规格型号
        /// </summary>
        public string Specification { get; set; }
        /// <summary>
        /// 计量单位
        /// </summary>
        public string MeasurementDimension { get; set; }
        /// <summary>
        /// 单价 4.00
        /// </summary>
        public string Price { get; set; }
        /// <summary>
        /// 数量 1.25
        /// </summary>
        public string Quantity { get; set; }
        /// <summary>
        /// 金额 6.00
        /// </summary>
        public string Amount { get; set; }
        /// <summary>
        /// 税率 1%,免税
        /// </summary>
        public string TaxScheme { get; set; }
        /// <summary>
        /// 税额 0.06,**
        /// </summary>
        public string TaxAmount { get; set; }
    }
}
